#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc, char *argv[]) {
    // 参数校验
    if (argc != 5 || strcmp(argv[1], "-t") != 0 || 
        (argv[2][0] < '1' || argv[2][0] > '3')) {
        fprintf(stderr, "Usage: %s -t [1|2|3] <command> <output_file>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    int method = argv[2][0] - '0';
    char *command = argv[3];
    char *output_file = argv[4];

    // 创建子进程
    pid_t pid = fork();
    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    } else if (pid == 0) { // 子进程
        // 打开输出文件
        int fd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
        if (fd == -1) {
            perror("open");
            exit(EXIT_FAILURE);
        }

        // 方法2：dup2重定向
        if (method == 2) {
            if (dup2(fd, STDOUT_FILENO) == -1) { // 将stdout重定向到文件
                perror("dup2");
                close(fd);
                exit(EXIT_FAILURE);
            }
            close(fd); // 关闭冗余文件描述符
        }

        // 执行命令
        execlp(command, command, NULL);
        perror("execlp"); // 如果exec失败才会执行到这里
        exit(EXIT_FAILURE);
    } else { // 父进程
        wait(NULL); // 等待子进程结束
    }

    return 0;
}
